package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set接口是Collection接口的子接口
 * Set接口存储数据，特点：无序，，，无下标，，，元素不可重复
 * 子实现类：存null，，不可以存null
 * 常用方法：Set接口的方法继承与Collection 接口
 * add()，remove(),contains(),size(),clear()
 * 迭代器：Iterator   进行遍历集合
 * 具体的实现类：
 * ① HashSet【常用】：由哈希算法实现保存数据的集合
 * 特点：不保证元素顺序，不允许元素重复，可以存null值
 * Set的方法HashSet   方法一致
 * <p>
 * ② LinkedHashSet【偶尔用】：可以存null，不允许元素重复，，保证元素顺序！！
 * ③ TreeSet【基本不用】：不允许元素重复，不可以存null值，，保证元素顺序，，比较器功能
 *                       对元素进行排序！，，性能，内存存储，，线程非常安全，，
 */
public class SetAPI {
    @Test
    public void testSet() {
        //创建Set集合---多态方式---保证数据唯一性
        Set<String> set = new HashSet<>();
        //add() 父类Set的方法|子类HashSet  add()----子类重写的方法
        set.add(new String("蒸鹿尾"));
        set.add(new String("烧花鸭"));
        set.add(new String("烧雏鸡"));
        set.add(new String("烧子鹅"));
        set.add(null);
        System.out.println("Set集合打印" + set);
        //remove方法--重写与Collection
        set.remove("烧雏鸡");         //返回值：boolean
        System.out.println("删除Set集合元素：" + set);
        boolean b = set.contains("烧雏鸡");
        System.out.println("判断元素是否存在Set集合中：" + b);
        System.out.println("Set集合的个数：" + set.size());
        // set.clear();
        //System.out.println("是否清空Set集合："+set);
        //使用Iterator   遍历Set集合数据
        //1.通过Set集合  调用iterator()  返回：Iterator实例【迭代器对象】
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String i = iterator.next();
            System.out.println(i);
            //2.遵循迭代器使用规则：问   取   删 ----删除null值
            if (i==null) {
                iterator.remove();
            }
        }
        //3.迭代器中打印元素：数据
        System.out.println(set);
    }
}
